// src/renderer/utils/webSocketManager.ts
import { ref } from "vue";
import { useStoreTemplate } from "@store/template";
const socket = ref(null); // 创建一个响应式引用来存储 WebSocket 实例
const isConnected = ref(false); // 标记 WebSocket 是否已连接
let heartbeatInterval = null; // 定义心跳定时器
const connect = () => {
    const store = useStoreTemplate(); // 创建 store 实例
    if (socket.value && isConnected.value) {
        console.log("WebSocket 已连接，无需重复连接");
        return; // 如果已连接，则不再创建新的连接
    }

    console.log("尝试连接 WebSocket...");

    // 创建新的 WebSocket 实例  
    socket.value = new WebSocket("ws://127.0.0.1:8092/websocket/1");

    // 监听 WebSocket 打开事件  
    socket.value.addEventListener("open", () => {
        console.log("WebSocket连接已打开");
        isConnected.value = true; // 更新连接状态  

        // 启动心跳定时器
        heartbeatInterval = setInterval(() => {
            if (socket.value && isConnected.value) {
                socket.value.send(JSON.stringify({ type: "ping" })); // 发送心跳消息
                console.log("发送心跳消息");
            }
        }, 30000); // 每30秒发送一次
    });

    // 监听 WebSocket 消息事件  
    socket.value.addEventListener("message", (event) => {
        const message = JSON.parse(event.data); // 解析消息
        // 处理消息逻辑
        store.handleSocketMessage(message); // 调用 action 将消息放入 store
    });

    // 监听 WebSocket 关闭事件  
    socket.value.addEventListener("close", () => {
        console.log("WebSocket连接已关闭");
        isConnected.value = false; // 更新连接状态  
    });

    // 监听 WebSocket 错误事件  
    socket.value.addEventListener("error", (error) => {
        console.error("WebSocket发生错误:", error);
        clearInterval(heartbeatInterval); // 清除心跳定时器
        retryConnection(); // 尝试重连
    });
};
const retryConnection = () => {
    if (retryTimeout) return; // 如果已经在重试，则不再重试
    retryTimeout = setTimeout(() => {
        console.log(`尝试重新连接 WebSocket，等待 ${retryInterval / 1000} 秒...`);
        connect(); // 尝试重新连接
        retryInterval = Math.min(retryInterval * 2, 30000); // 每次重试间隔加倍，最大30秒
        retryTimeout = null; // 清空重试定时器
    }, retryInterval);
};
const closeConnection = () => {
    if (socket.value) {
        socket.value.close(); // 关闭 WebSocket 连接  
        socket.value = null; // 清空 socket 实例
        isConnected.value = false; // 更新连接状态
        clearInterval(heartbeatInterval); // 清除心跳定时器
    }
};

export { socket, isConnected, connect, closeConnection };